//T10088. 信使 Dijkstra算法 无法处理负边权
#include <iostream>
#include <queue>

using namespace std;
const int MAXN=100;
const int INF= 0x7fffffff;
int n,m;
int cost[MAXN+1][MAXN+1];
int mincost[MAXN+1];
bool visited[MAXN+1];

struct Node{
    int id;
    bool operator <(const Node other)const {
        return mincost[id]>mincost[other.id];
    }
};
priority_queue<Node> heap;
int main(){
    cin>>n>>m;
    for(int i=1;i<=m;i++) {
        int u,v,k;
        cin>>u>>v>>k;
        cost[u][v]=cost[v][u]=k;
    }
    for(int i=1;i<=n;i++) mincost[i]=INF;
    mincost[1]=0;
    heap.push({1});
    while(!heap.empty()){
        int u=heap.top().id;
        heap.pop();
        if (!visited[u]){//限定在第一次出堆，同一节点可能在堆中多次出现，因为用优先队列模拟堆，无法在mincost[i]值
                        //改变时，自动调整i的位置，只能让i重复入堆。
            visited[u]=true;
            for(int v=1;v<=n;v++){
                if (!visited[v] &&cost[u][v]>0&&mincost[u]+cost[u][v]<mincost[v]){
                    mincost[v]=mincost[u]+cost[u][v];
                    heap.push({v});
                }
            }
        }
    }
    int ans=0;
    for(int i=1;i<=n;i++)
        if (mincost[i]>ans) ans=mincost[i];
    cout<<ans;
}

